#pragma once
#include "stdafx.h"
#include "Element.h"
#include "JsonSchema.h"
#include <boost/asio.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/shared_ptr.hpp>
/*
 * Any wrapper of information source should implement this interface 
 */
class IStreamInput
{
private:
	std::string id;
	boost::shared_ptr<JsonSchema>jsonSchema;
	virtual void getNextElement(Element& element) = 0;
public:

	IStreamInput(boost::shared_ptr<JsonSchema>jsonSchema);
	virtual ~IStreamInput(void);
	bool getAndCheckNextElement(Element& element);
	virtual bool isEmpty() = 0;
	virtual void initial() = 0;
	std::string getId(void);
};

